#
-# Copyright (C) 2013 OpenWrt.org
+# Copyright (C) 2013-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=shairport
PKG_VERSION:=2014-05-08
-PKG_RELEASE:=$(PKG_SOURCE_VERSION)
+PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://github.com/abrasive/shairport.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=078b21043cdcef6ffad7452db27f036770b23b0c
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
include $(INCLUDE_DIR)/package.mk
define Package/shairport
SECTION:=multimedia
CATEGORY:=Multimedia
- DEPENDS:=+libpthread +avahi-utils +libopenssl +libao +libavahi-client \
- +alsa-utils
+ DEPENDS:=+libpthread +avahi-utils +libopenssl +libavahi-client +alsa-utils
TITLE:=ShairPort AirPort Express emulator
endef
TARGET_CFLAGS += $(FPIC)
-LIBS:=-lao -lm -lcrypto -lpthread -lavahi-common -lavahi-client -lasound
+LIBS:=-lm -lcrypto -lpthread -lavahi-common -lavahi-client -lasound
MAKE_FLAGS += \
CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS) $(LIBS)"
define Package/shairport/install
- $(INSTALL_DIR) $(1)/usr/sbin
- $(INSTALL_BIN) $(PKG_BUILD_DIR)/shairport $(1)/usr/sbin/
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/shairport $(1)/usr/bin/
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_BIN) files/shairport.init $(1)/etc/init.d/shairport
$(INSTALL_DIR) $(1)/etc/config
#!/bin/sh /etc/rc.common
-# Copyright (C) 2013-2014 OpenWrt.org
-START=50
-USE_PROCD=1
+NAME=shairport
+START=94
-config_shairport() {
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+AP_PIDDIR=/var/run
+AP_BIN=/usr/bin/shairport
+
+append_arg() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get val "$cfg" "$var"
+ [ -n "$val" -o -n "$def" ] && append AP_ARGS "$opt ${val:-$def}"
+}
+
+append_bool() {
+ local cfg="$1"
+ local var="$2"
+ local opt="$3"
+ local def="$4"
+ local val
+
+ config_get_bool val "$cfg" "$var" "$def"
+ [ "$val" = 1 ] && append AP_ARGS "$opt"
+}
+
+start_instance() {
+ AP_ARGS=""
+ local cfg="$1"
+ local ao dev
+
+ append_arg "$cfg" bname "-a" "AirPort"
+ append_arg "$cfg" log "-l"
+ append_arg "$cfg" initbuf "-b" "256"
+ append_arg "$cfg" port "-p" "5002"
+ append_arg "$cfg" password "-k"
+ append_arg "$cfg" mdns "-m"
+
+ append_arg "$cfg" cmd_start "-B"
+ append_arg "$cfg" cmd_stop "-E"
+ append_bool "$cfg" cmd_wait "-w"
+
+ append_arg "$cfg" audio_output "-o"
+
+ config_get ao "$cfg" audio_output ""
+ if [ "$ao" = "alsa" ]; then
+ config_get dev "$cfg" output_device ""
+ if [ -n "$dev" ]; then
+ append AP_ARGS "--"
+ append_arg "$cfg" output_device "-d"
+ append_arg "$cfg" mixer_device "-m"
+ append_arg "$cfg" mixer_type "-t"
+ append_arg "$cfg" mixer-control "-c"
+ append_arg "$cfg" mixer-index "-i"
+ fi
+ fi
+
+ SERVICE_PID_FILE=${AP_PIDDIR}/${NAME}_${cfg}.pid
+ service_start $AP_BIN $AP_ARGS
+
+ # Check if daemon is running, if not then
+ # re-execute in foreground to display error.
+ sleep 1 && service_check $AP_BIN || \
+ $AP_BIN $AP_ARGS
+}
+
+stop_instance()
+{
local cfg="$1"
- local cfg_name
- local cfg_password
- local cfg_port
- local cfg_buffer
- local cfg_log
- local cfg_cmd_start
- local cfg_cmd_stop
- local cfg_cmd_wait
- local cfg_audio_output
- local cfg_mdns
-
- config_get cfg_name $cfg 'name' 'AirPort'
- config_get cfg_password $cfg 'password' ''
- config_get cfg_port $cfg 'port' '5002'
- config_get cfg_buffer $cfg 'buffer' '256'
- config_get cfg_log $cfg 'log' '/var/log/shairport'
- config_get cfg_cmd_start $cfg 'cmd_start' ''
- config_get cfg_cmd_stop $cfg 'cmd_stop' ''
- config_get_bool cfg_cmd_wait $cfg 'cmd_wait' '0'
- config_get cfg_audio_output $cfg 'audio_output' ''
- config_get cfg_mdns $cfg 'mdns' ''
-
- procd_open_instance
-
- procd_set_param command /usr/sbin/shairport
- procd_append_param command -a "$cfg_name"
- [ ! -z "$cfg_password" ] && procd_append_param command -k "$cfg_password"
- procd_append_param command -p $cfg_port
- procd_append_param command -b $cfg_buffer
- procd_append_param command -l $cfg_log
- [ ! -z "$cfg_cmd_start" ] && procd_append_param command -B "$cfg_cmd_start"
- [ ! -z "$cfg_cmd_stop" ] && procd_append_param command -E "$cfg_cmd_stop"
- [ "$cfg_cmd_wait" -eq 1 ] && procd_append_param command -w
- [ ! -z "$cfg_audio_output" ] && procd_append_param command -o "$cfg_audio_output"
- [ ! -z "$cfg_mdns" ] && procd_append_param command -m "$cfg_mdns"
-
- procd_set_param respawn
- procd_close_instance
+ SERVICE_PID_FILE=${AP_PIDDIR}/${NAME}_${cfg}.pid
+ SERVICE_SIG_STOP="INT"
+ service_stop $AP_BIN
+}
+
+start() {
+ config_load shairport
+ config_foreach start_instance shairport
}
-start_service() {
+stop() {
config_load shairport
- config_foreach config_shairport shairport
+ config_foreach stop_instance shairport
}